/*
struct TreeNode {
	int val;
	struct TreeNode *left;
	struct TreeNode *right;
	TreeNode(int x) :
			val(x), left(NULL), right(NULL) {
	}
};*/
/*
根节点入队，尾指针++；
当队不空，取出队头元素，如果它的左孩子不空，左入队，右不为空，右入队
判断队头元素是不是最右边的元素，如果是层数level++,此时队尾指针指向的是下层的最右元素
*/
class Solution {
public:
    int TreeDepth(TreeNode* root) {
        if(!root)
            return 0;
        //表示队列的头尾指针
        int front=-1,rear=-1;
        //指向当前层的最右边元素，
        int last=0;
        //层数
        int level=0;
        TreeNode*Queue[20];
        Queue[++rear]=root;
        TreeNode *p;
        //队列不空
        while(front<rear)
        {
            p= Queue[++front];
            if(p->left)
                Queue[++rear]=p->left;
            if(p->right)
                Queue[++rear]=p->right;
            if(front==last)//出队的元素是最右边的元素
            {     
                level++;
                last=rear; //此时队尾元素是当前层的最右边元素
            }
        }
        return level;
    }
};